parser grammar Anasint;

options {
  language = Java;
  tokenVocab = Analex;
  k = 6;
}



@header {
  package practicaspl.cinco;
} 

flex : bloque1 bloque2 bloque3;


tipo : (CHAR|VOID|TIPO|INT);
rangoa : CORCHETEA (RANGOLETRA|RANGODIG|NUMERO)? CORCHETEC;

bloque1: (prueba)* asigna;
prueba : IDENT (rangoa);
asigna : BLOQUE asig BLOQUE;
asig : (tipo IDENT SEMICOLON)+;

bloque2: SEPABLOQUE (sentencia)*;
sentencia: LLAVEA IDENT LLAVEC(MAS)? (PARENTA sentencia2 BARRA sentencia2 PARENTC AST)? IDENT(INC|DEC) SEMICOLON; 
sentencia2 : (LLAVEA IDENT LLAVEC);

bloque3: SEPABLOQUE (funcion)*;
funcion: tipo IDENT PARENTA argumentos LLAVEA funcion2 retorno LLAVEC;
funcion2: ((IDENT|rangoa|IGUAL|PARENTA argumentos|NUMERO)* SEMICOLON)*;
argumentos : (IDENT|NUMERO|rangoa|COMA|tipo|AST|STRING)* PARENTC;
retorno: RETURN (NUMERO|IDENT)? SEMICOLON;
